Add teemops.com as a design-partner recruitment page - #115
Open
kiwifellows wants to merge 1 commit into
Open
Conversation
The Self-Hosted Design Partners milestone has been limited by recruitment rather than engineering since 2026-08-01, and there was nowhere to send anyone: teemops.com served nothing. What was in the repo was worse than nothing. design/marketing/web/ held a complete three-page site for a hosted commercial SaaS — Free/Starter/Pro/ Business pricing tiers, "Start Free" CTAs pointing at app.teem.nz/register, a domain that now redirects to an unrelated property — and no mention that TOPS is open source. It contradicted D-1 and D-6 on its face. It is deleted rather than kept as reference, because a second contradictory description of the product is a trap for whoever opens it next. Git history has it. A brand-new page will not generate inbound leads inside the milestone window, so this is built as a conversion asset for outbound rather than a lead engine: one page, stating what TOPS is, proving it is real, saying plainly what it does not do, and making one specific ask. The use-case, compliance and SEO pages from the old content plan are dropped as premature at zero traffic. Every number on the page is checked against the code rather than intent: 74 rules (52 basic + 22 CIS) across 11 services, all carrying a remediation, all 28 critical/high carrying step-by-step guidance. www/README.md records where each is verified. Lead capture is a Worker writing to D1, protected by a honeypot field. Turnstile was built, tested and removed before launch: at five-partner volume a few junk rows are cheaper to skim than a widget is to run, the endpoint sends no email and publishes nothing so spam has no amplification path, and a third-party challenge script that fails to load makes the form unsubmittable and loses a real lead silently. Bot Fight Mode and a rate-limiting rule are the first two responses if spam arrives; Turnstile is the third. Deployment reuses D-13's pattern (Workers static assets), so this adds no new category of infrastructure — one CLI command, one dashboard step, no secrets. Recorded as N-12 and D-14. The roadmap review that preceded this also found it stale in four places, corrected here: N-11's checkboxes were unticked though it shipped, the workstream's "Open — UI" table still listed four closed issues, docs.teemops.com was recorded as not yet connected when it is live and serving, and #109 and #111 appeared nowhere. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Signed-off-by: Ben Fellows <kiwifellows@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What and why
The design-partner milestone has been limited by recruitment, not engineering since 2026-08-01, and there was nowhere to send anyone —
teemops.comserved nothing. This adds a single page whose only job is turning a visitor into a design-partner conversation.What was already in the repo was worse than nothing:
design/marketing/web/was a complete three-page site for a hosted commercial SaaS, with Free/Starter/Pro/Business pricing tiers and "Start Free" CTAs pointing atapp.teem.nz/register— a domain that now redirects to an unrelated property. It contradicted D-1 and D-6 on its face and never mentioned that TOPS is open source. It is deleted, not archived: a second contradictory description of the product in the repo is a trap for whoever opens it next. Git history has it.User story
Not a feature — this is a marketing site plus one endpoint, so no story in
docs/features/. The reasoning is recorded in the roadmap as N-12 and D-14.How it was tested
Automated —
npm testinwww/, 16 tests overPOST /api/design-partner, run insideworkerdagainst a real local D1 (@cloudflare/vitest-pool-workers), so the SQL genuinely executes rather than being mocked:aws_scaleoutside the allowlist)Every assertion checks the database as well as the status code, because the failure that matters is a request that answers
201and stores nothing.The suite was mutation-tested: disabling the honeypot fails a test, removing the
aws_scaleallowlist fails a test.Manual — full submit through the real page JS into D1; contrast measured from live computed styles; layout checked at 1280px, 375px and 320px.
Claims on the page
Each was verified against the code, not against intent, and
www/README.mdrecords where:basic.json(52) +cis.json(22)app/rules/tasks/remediationtips.json; none missingVERSION,pci.json(0 rules), grep for analytics SDKsQuality gate
docs/practices/npm run db:initandteemops.comattached as a custom domain in the dashboard. No secrets.Practices check
aws_scaleon an allowlist, SQL parameterised via.bind(), no secrets committed (there are none to commit), DB errors logged but never returned to the client. The endpoint is deliberately unauthenticated — it is a public signup form.IF NOT EXISTS, applied by one command.scan:validate-rulesis not applicable. Worth noting it could not have been run in this worktree anyway: there is novendor/, sophp artisandoes not boot.Reviewer notes
www/is a second Workers project. The repo rootwrangler.jsoncisdocs.teemops.com; this one isteemops.com. Run wrangler from insidewww/.worker-configuration.d.tsis gitignored. It is 14,707 generated lines;npm run typecheckregenerates it first. That is what took this diff from ~17.6k insertions to ~4.3k.@cloudflare/vitest-pool-workers0.20 changed its config API — the/configsubpath anddefineWorkersConfigare gone, and pool options now go to acloudflareTest()plugin. Most examples online are still on the old shape;vitest.config.tshas a comment explaining it.Out of scope
docs.teemops.comanduser-docs/say "TOPS". One of the two should move, and that decision is not made here.claude/email-mfa-roadmap-c99b1d) predates the pivot to this work and no longer describes it.